package formulation;
import java.util.Stack;
import es.deusto.ingenieria.is.search.formulation.State;

public class Soporte extends State implements Cloneable
{	
	private int posicion;
	private Stack<Disco> discos = null;
	
	public Soporte(int posicion)
	{
		this.posicion = posicion;
		discos = new Stack<Disco>();
	}
	
	public void cargarDiscosSoporte(int numDiscos)
	{
		for (int i = numDiscos; i >= 1; i--)
		{
			discos.push(new Disco(i));
		}
	}
	
	@Override
	public String toString()
	{
		String cadena = "";
		
		if (!this.discos.isEmpty())
		{
			cadena = "Soporte de la posicion '"+ this.getPosicion() + "'. Discos: <";
			
			for (int i = 0; i < this.discos.size(); i++)
			{
				cadena = cadena + this.discos.get(i).getSize() + ",";
			}
			
			cadena = cadena + ">";
		}	
		return cadena;
	}
	
	@Override
	protected Object clone() throws CloneNotSupportedException
	{
		Soporte clon = new Soporte(this.posicion);
		
		for (int i = 0; i < this.discos.size(); i++)
		{
			clon.discos.add(i, new Disco(this.discos.get(i).getSize()));
		}
		
		return clon;
	}
	
	@Override
	public boolean equals(Object obj)
	{
		boolean iguales = false;
		
		if (obj != null && obj instanceof Soporte)
		{
			Soporte soporte = (Soporte) obj;
			
			if ((soporte.posicion == this.posicion) && (soporte.discos.size() == this.discos.size()))
			{
				iguales = true;
				int i = 0;
				
				while ((iguales == true) && (i < this.discos.size()))
				{
					if (!soporte.getDiscos().get(i).equals(this.discos.get(i)))
					{
						iguales = false;
					}	
					
					i++;
				}
			}
		}
		
		return iguales;
	}
	
	public Stack<Disco> getDiscos()
	{
		return discos;
	}

	public void setDiscos(Stack<Disco> discos)
	{
		this.discos = discos;
	}

	public int getPosicion()
	{
		return posicion;
	}	
	
	public void setPosicion(int posicion)
	{
		this.posicion = posicion;
	}
}
